#include <stdio.h>

int main(int argc, const char *argv[])
{
	int s[3][4] = {1,2,3,4,\
					5,6,7,8,\
					9,10,11,12};

	// 定义了一个数组指针 指针名叫p 可以指向一个列宽为4的二维数组
	int (*p)[4] = NULL;
	p = s;  // 让指针p指向二维数组s
	// int (*p)[4] = s; // 初始化的写法

	// 当指针p指向数组s后 就有如下的等价关系
	// s[i][j] <==> *(s[i]+j) <==> *(*(s+i)+j) <==
	// ==> p[i][j] <==> *(p[i]+j) <==> *(*(p+i)+j)

	// 遍历二维数组
	int i = 0;
	int j = 0;
	for(i = 0; i < 3; i++){
		for(j = 0; j < 4; j++){
			//printf("%d ", s[i][j]);
			//printf("%d ", *(s[i]+j));
			//printf("%d ", *(*(s+i)+j));
			//printf("%d ", p[i][j]);
			//printf("%d ", *(p[i]+j));
			printf("%d ", *(*(p+i)+j));
		}
		printf("\n");
	}

	// s 和 p 区别？
	// 1.sizeof(s) 是二维数组总大小  sizeof(p) 是一个指针的大小
	// 2. s 是数组名 是常量   p是指针 是变量

	return 0;
}
